WallControl 10 API Documentation
Introduction
There are two parts of the WallControl 10 system that have APIs:
Server - The server API allows for management of walls, such as starting/stopping walls, creating walls, etc.
Wall Server - The wall server API allows for manipulation of content on the wall, source management, opening/closing layouts, etc. There is one Wall Server (on a unique port) for each running wall.
REST API
There are two elements to the API, the first is the REST API, which is documented using Swagger. Swagger is an API exploration tool that is now optionally hosted within the WallControl 10 Server and WallControl 10 Wall Server processes. It enables you to discover which API calls are available, and even test them directly from the site. Swagger must first be enabled in the WallControl 10 Server by clicking Open Server Overview in the WallControl 10 Server tray icon popup, clicking the Settings tab, and enabling the "Enable Swagger UI" option. Once the server has been restarted, Swagger UI will be available at the following URLs:
Server - http://<wallserver>:19821/swagger
Wall Server - http://<wallserver>:<wallport>/swagger
Swagger also hosts an OpenAPI specification for the API, at the following URLs:
Server - http://<wallserver>:19821/swagger/v1/swagger.json
Wall Server - http://<wallserver>:<wallport>/swagger/v1/swagger.json
Note that it is not recommended to enable Swagger on a system other than for development purposes. Note that the API will still function with Swagger disabled.
These OpenAPI specifications can be used for automatic API client-generation in many programming languages. For C# the recommended client generator is NSwagStudio and for most other languages OpenAPI Generator can be used.
SignalR Hub
The second element of the API is the SignalR hub for the Server and Wall Servers. SignalR allows you to receive real-time updates to changes within the WallControl 10 system, such as windows being opened, layouts being added, changes to sources, etc. You can connect to SignalR using clients for C#, JavaScript, and Java.
Like the REST API, there are two SignalR hubs - one for the Server and one for the Wall Server. These are available at the following addresses:
Server - http://<wallserver>:19821/callbacks
Wall Server - http://<wallserver>:<wallport>/callbacks
SignalR Events
Wall Server
| AllWindowsClosed | All windows on the wall have been closed via the CloseAllWindows call |
| BulkDisplayRegionUpdate | When a layout is opened this event is fired containing information for all windows on the wall |
| BulkSourceDefinitionUpdate | Raised immediately after a layout is opened if it contains Application sources |
| DisplayRegionUpdated | Raised when a display region is updated or changed in any way |
| LayoutAdded | Raised after a new layout is added |
| LayoutOpened | Raised after a layout has been successfully opened on the wall |
| LayoutUpdated | Raised after an existing layout has been successfully updated |
| LayoutDeleted | Raised after a layout has been deleted |
| SourceDefinitionAdded | Raised after a new source has been added to the source definitions |
| SourceDefinitionDeleted | Raised after an existing source has been removed from the source definitions |
| SourceDefinitionUpdated | Raised after an existed source has been updated or changed |
| WallTemplateAdded | Raised after a new template has been added |
| WallTemplateDeleted | Raised after an existing template has been deleted |
| WallTemplateUpdated | Raised after an existing template has been updated |
| WallTopologyChanged | When the Wall Topology changes (screens moved, resolution changed etc) this event is fired |
| WindowClosed | Raised after a WallControl 10 window has been closed on the wall |
Desktop Server
| ServerTopologyChanged | When the Server Topology changes (screens moved, resolution changed etc) this event is fired |
| WallAdded | Raised after a new wall has been created |
| WallUpdated | Raised after an existing wall has been changed |
| WallDeleted | Raised after an existing wall has been deleted |
Source Properties
What follows is a guide to getting and setting Source and Instance Properties. For this example we recommend placing a single vision source on the wall via WC10 server. This arrangement will cause the wall to have one single window, with one single display region within the window, and one single vision source within the display region. This is a simple example to provide the user with a means to understand the API and to develop their own application.
Windows Controller
This controller has various API methods to get the windows displayed on the wall. You need to have the DisplayRegionId from one of these windows to continue.
The information returned from either will contain the Display Region ID
Sources Controller
Getting Source Properties
Two API calls here will get the current source instance and source definition properties of any display region.
Definition properties are properties against the source and require the Source Definition ID.
Instance properties are live properties of an instance of a source on the wall.
Use these api methods to get examples of source properties you are interested in. Each sourceProperty has a propertyType number – see included list to identify the property you are interested in.
The group type identifies the property as a instance/input/source property type, but this should not concern you at the next stage.
Finally, each property has a valueType which corresponds to the data type of the property. This cannot be changed and indicates which value in the model needs to be populated. See list included.
Setting Source Properties
There is one api method to set a source property, and the model data you provide will depend on which property you require to set
Examples
Setting Pixel Format
{
"sourceDefinitionId": "sourceDefinitionGuid",
"sourceInstanceId": "sourceInstanceGuid",
"propertyType": 16,
"valueType": 6,
"valueEnum": {
"currentValue": newValue,
"defaultValue": 0,
"enumItems": [
{
"name": "Automatic",
"value": 0
},
{
"name": "RGB565",
"value": 2
},
{
"name": "RGB888",
"value": 3
},
{
"name": "YUY2",
"value": 6
}]
}
}
Setting Colour Space
{
"sourceDefinitionId": "sourceDefinitionGuid",
"sourceInstanceId": "sourceInstanceGuid",
"propertyType": 12,
"valueType": 6,
"valueEnum": {
"currentValue": newValue,
"defaultValue": 0,
"enumItems": [
{
"name": "RGB 709 FULL",
"value": 0
},
{
"name": "YUV 709 FULL",
"value": 1
},
{
"name": "YUV 601 FULL",
"value": 2
},
{
"name": "YUV 709 STUDIO",
"value": 3
},
{
"name": "YUV 601 STUDIO",
"value": 4
},
{
"name": "Automatic",
"value": 5
},
{
"name": "RGB 709 STUDIO",
"value": 6
},
{
"name": "YUV 2020 FULL",
"value": 7
},
{
"name": "YUV 2020 STUDIO",
"value": 8
},
{
"name": "RGB 601 FULL",
"value": 9
},
{
"name": "RGB 601 STUDIO",
"value": 10
},
{
"name": "RGB 2020 FULL",
"value": 11
},
{
"name": "RGB 2020 STUDIO",
"value": 12
}]
}
}
Enumerations
Property Type [propertyType : int]
Code Description 0 Unknown 1 Name 2 Aspect Ratio 3 File Location 4 URL 5 Media Location 6 Resolution 7 Signal Type 8 Source Refresh Rate 9 Video Standard 10 Capture Refresh Rate 11 Deinterlace Modes 12 ColourDomain (Colour Space) 13 Link Rate 14 Rotation 15 Equalisation 16 Pixel Format 17 Brightness 18 Contrast 19 Rgb Reset 20 Hue 21 Saturation 22 Audio Enabled 23 Crop Dimensions 24 VNC Host Address 25 VNC Password 26 Application Path 27 Application Command Line 28 Application Icon 29 Application Window Title 30 Ganging 31 Cropping 32 Browser Refresh Interval 33 Browser Vertical Pixel Offset 34 Input Number 35 Remote Connection 36 Jitter 37 Cache 38 Authentication 39 Zoom 40 Browser Horizontal Pixel Offset 41 Transport Protocol 42 Password
Value Type [valueType : int]
Code Type Value 0 Bool valueBool 1 Int valueInt 2 String valueString 3 Size valueSize 4 Rectangle valueRectangle 5 Cropping valueCropping 6 Enum valueEnum 7 Icon valueIcon 8 Range valueRange 9 Two State valueTwoState 10 Authentication valueAuthenticationInfo 11 Password valuePasswordInfo
Group Type [groupType : int]
Code Description 0 Instance 1 Input 2 Source